package code15.io;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

public class Test01 {

	public static void main(String[] args) {
		// 异或 ^
//		int m = 12;
//		int p = 3;
//		int n = m ^ p;
//		System.out.println(n);// 15
//		int x = n ^ p;// m ^ p ^ p = m
//		System.out.println(x);// 12
		// 加密
		//encryptOrDecryptFile("E:/workspace/wbs22032/src/code15/io/Chrysanthemum.jpg", 123);
		// 解密
		//encryptOrDecryptFile("E:/workspace/wbs22032/src/code15/io/Chrysanthemum.jpg_encrypt", 123);
	}
	
	/**
	 * 加密或解密文件<br>
	 * 加密后的文件以 _encrypt 结尾 <br>
	 * 内部使用 异或 操作
	 * @param path 需要加密或解密的文件路径
	 * @param pwd 密码
	 */
	public static void encryptOrDecryptFile(String path, int pwd) {
		File f = new File(path);
		if (!f.isFile()) {
			throw new IllegalArgumentException("["+path+"]不是文件");
		}
		String suffix = "_encrypt";
		String name = f.getName();
		// 默认加密, 获取加密后的名称
		String newName = name + suffix;
		if (name.endsWith(suffix)) {
			// 是解密操作, 获取解密后的名称
			newName = name.replace(suffix, "");
		}
		// 加密
		try (
				FileInputStream fis = new FileInputStream(f);
				FileOutputStream fos = new FileOutputStream(
						new File(f.getParentFile(), newName));
		) {
			
			int read = -1;
			while ( ( read = fis.read() ) != -1 ) {
				// 异或 加密、解密
				int c = read ^ pwd;
				fos.write(c);
			}
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}
